package zhouyang;

/**
 *类加载器ClassLoader
 * 1.BootstrapClassLoader(启动类加载器)根加载器，C++编写的，JVM自带的
 * 2.Extension ClassLoader(标准扩展类加载器)java编写，加载扩展库
 * 3.AppClassLoader (系统类加载器)java编写的，加载程序所在的目录
 */
public class Hello2013 {
    private native void start0();//native方法在类中 可以只有方法声明，没有方法体
    public static void main(String[] args) {
        Object object = new Object();
        System.out.println(object.getClass().getClassLoader());//null
        System.out.println();
        System.out.println();
        System.out.println();
        Hello2013 hello2013 = new Hello2013();
        System.out.println(hello2013.getClass().getClassLoader());//sun.misc.Launcher$AppClassLoader@18b4aac2
        System.out.println(hello2013.getClass().getClassLoader().getParent());//sun.misc.Launcher$ExtClassLoader@1540e19d
        System.out.println(hello2013.getClass().getClassLoader().getParent().getParent());//null
/**
 * 双亲委派机制：当某个类收到了类加载请求，首先把这个任务委托给他的上级类加载器，递归这个操作
 * 因此所有的加载请求都应该传送到启动类加载，
 * 如果上级的类加载器没有加载，自己才会去加载这个类(类似“我爸是李刚，有事找我爸”)
 * 优势：避免类的重复加载，保护程序安全，防止核心API被随意篡改
 * 自定义类：java.lang.String(没用)
 * 自定义类：java.lang.SSS(报错，阻止创建java.lang开头的类)
 *
 */
        Thread thread = new Thread();
        thread.start();
        /**
         * Native Interface本地接口：作用是融合不同的编程语言为Java所用，初衷是融合C/C++程序，Java诞生的时候是
         * C/C++横行的时候，要想立足，必须有调用C/C++程序，于是就在内存中专门开辟了一块区域处理标记为native的代码
         * 它的具体做法是Native Method Stack中登记native方法，在Execution Engine执行时加载native libraies。
         * 目前该方法使用的越来越少了，除非是与硬件有关的应用。
         */
    }
}
